/*
 * Copyright (C) 2009 Otávio Scherer Garcia
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.googlecode.technorati4j;

import java.io.IOException;
import java.io.InputStream;

import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

/**
 * Try to get the DTD entities from local repository.
 * 
 * @author Otávio Scherer Garcia
 * @version $Revision$
 */
public class DTDEntityResolver
    implements EntityResolver {

    /**
     * Technorati namespace prefix for responses.
     */
    static final String TECHNORATI_NAMESPACE = "http://api.technorati.com/dtd/";

    /**
     * The location where the DTD files are cached.
     */
    static final String RESOURCES = "/com/googlecode/technorati4j/resources/";

    public InputSource resolveEntity(String publicId, String systemId)
        throws SAXException, IOException {
        if (systemId.startsWith(TECHNORATI_NAMESPACE)) {
            String path = RESOURCES + systemId.substring(TECHNORATI_NAMESPACE.length());
            InputStream dtdStream = getClass().getResourceAsStream(path);

            // if was found
            if (dtdStream != null) {
                InputSource source = new InputSource(dtdStream);
                source.setPublicId(publicId);
                source.setSystemId(systemId);

                return source;
            }

        }

        return null;
    }

}
